package com.ywj.demo01_concurrent_porblem;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 案例演示: 一个线程对共享变量的修改,另一个线程不能立即得到最新值
 */
public class Test01Visibility {
    private final static Logger LOG = LoggerFactory.getLogger(Test01Visibility.class);
    // 多个线程都会访问的数据，我们称为线程的共享数据
    //1.创建一个共享变量
    private static boolean run = true;

    public static void main(String[] args) throws InterruptedException {
        //2.创建一个线程不断读取共享变量
        new Thread(() -> {
            while(run) {
//                LOG.info("当前线程run的值为：{}", run);
//                System.out.println("当前线程run的值为：" + (run));  ////会停，因为println函数中用到synchronized关键字
            }
            LOG.info("{} 读取run：{}，线程结束", Thread.currentThread().getName(), run);
//            System.out.println(Thread.currentThread().getName() + " 读取run：" + run + "，线程结束");
        }, "Thread1").start();

        Thread.sleep(1000);

        //3.创建一个线程修改共享变量
        new Thread(() -> {
            run = false;
            LOG.info( "{} 修改run值为：{}", Thread.currentThread().getName(), run);
//            System.out.println(Thread.currentThread().getName() + " 修改run值为：" + run);
        }, "Thread2").start();

    }

}
